package main
import (
	"fmt"
	"sync"
)
//计算1-15的各个数的阶乘，并放到map中  //解决goroutine3.go的问题~！
//使用goroutine-channel完成
var (
	myMap = make(map[int]int,10)
	//1）声明一个全局的互斥锁  lock 是一个全局的互斥锁   sync 是包： synchornized 同步
	//Mutex 互斥
	lock sync.Mutex
	exitchan chan bool
)
func main(){
	exitchan = make(chan bool,1)
	//开启15个协程完成任务 
	for i:=1;i<=15;i++{
		go test(i)
	} 
	for v := range exitchan{
		fmt.Printf("15个协程执行完了吗?%v执行完就继续了！\n",v)
	}
	for i,v := range myMap{
		fmt.Printf("map[%d]:%d\n",i,v)
	}
}


func test(n int){
	res := 1
	for i:=1;i<=n;i++{
		res *=i
	}
	lock.Lock()  //2）加锁  防止并行写入map
	myMap[n] = res
	lock.Unlock()  //3）解锁
	if n == 15{
		exitchan <- true
		close(exitchan)
	}
}
